package com.cf.ops.generator.util;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.config.po.LikeTable;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

/**
 * @author ChenFeng
 * @date 2021/11/5 2:58 下午
 * @description
 */
public class GeneratorUtil {
    public static void main(String[] args) {
        String projectPath = System.getProperty("user.dir");
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/sword?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC", "root", "123456")
                .globalConfig(builder -> {
                    builder.fileOverride() // 是否覆盖生成文件
                            .outputDir(projectPath+"/ops/generator-code/src/main/java") // 指定输出目录
                            .author("chenfeng") // 作者
//                            .enableKotlin() // 开启 kotlin 模式
//                            .enableSwagger() // 开启 swagger 模式
                            .dateType(DateType.TIME_PACK)
                            .commentDate("yyyy-MM-dd");
                })
                .packageConfig(builder -> {
                    builder.parent("com.cf.ops.generator") // 父包名
//                            .moduleName("generator") // 父包模块名
                            .entity("entity") // Entity 包名
                            .service("service") // Service 包名
                            .serviceImpl("service.impl") // Service Impl 包名
                            .mapper("mapper") // Mapper 包名
                            .xml("mapper") // Mapper XML 包名
                            .controller("controller") // Controller 包名
                            .other("other") // 自定义文件包名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath+"/ops/generator-code/src/main/resources/mapper")); // 路径配置信息
                })
                .templateConfig(builder -> {
                    builder.disable(TemplateType.ENTITY) // 禁用模板
                            .entity("/templates/entity.java") // 设置实体模板路径(JAVA)
                            .service("/templates/service.java") // 设置 service 模板路径
                            .serviceImpl("/templates/serviceImpl.java") // 设置 serviceImpl 模板路径
                            .mapper("/templates/mapper.java") // 设置 mapper 模板路径
                            .mapperXml("/templates/mapper.xml") // 设置 mapperXml 模板路径
                            .controller("/templates/controller.java"); // 设置 controller 模板路径
                })
                .strategyConfig(builder -> {
                    builder.enableCapitalMode() // 开启大写命名
                            .enableSkipView() // 开启跳过视图
                            .disableSqlFilter() // 禁用 sql 过滤
                            .likeTable(new LikeTable("USER")) // 模糊表匹配(sql 过滤)
                            .addInclude("sword_tenant") // 增加表匹配(内存过滤)
                            .addTablePrefix("sword_") // 增加过滤表前缀
//                            .addFieldSuffix("_flag"); // 增加过滤字段后缀
                            .entityBuilder()
                            .enableLombok();
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
